import { initMixin } from './init'
import { stateMixin } from './state'
import { renderMixin } from './render'
import { eventsMixin } from './events'
import { lifecycleMixin } from './lifecycle'
// import { warn } from '../util/index'

// 创建Vue对象
/* 
Vue：
构造函数：用来初始化创建对象的函数
实例对象：通过构造函数 new 出来的对象，一个构造函数可以创建多个实例对象
原型对象：实例对象上的prototype属性对象，称为原型对象
================================================
三者相互关系：
1> 实例对象的constructor 等于构造函数 【f1.constructor === Fn】
2> 实例对象的__proto__ 等于原型对象  【f1.__proto__ === Fn.prototype】
3> 原型对象的constructor 等于构造函数 【Fn.prototype.constructor === Fn】
*/
// Vue实例创建
function Vue (options) {
  // 判断测试还是生产环境，调试时无用
  // if (process.env.NODE_ENV !== 'production' &&
  //   !(this instanceof Vue)
  // ) {
  //   warn('Vue is a constructor and should be called with the `new` keyword')
  // }
  // src/core/instance/init.js 16行
  this._init(options)
}

initMixin(Vue) // 初始化vue实例
stateMixin(Vue) // state数据绑定，$watch观察者监听
eventsMixin(Vue) // 初始化事件绑定
lifecycleMixin(Vue) // 初始化vue 创建、挂载、更新、销毁等生命周期
renderMixin(Vue) // 初始化 render函数

export default Vue
